#include "messageHandle.h"
#include <json-c/json.h>
#include "stdShared.h"

// 构造函数
MessageHandler::MessageHandler(const StdTcpSocketPtr &client) : m_chatroom(client)
{
    // 清除脏数据
    m_handles.clear();
    
    // 函数注册表
    m_handles[REGISTER] = [this](const std::string &msg) {m_chatroom.handleRegisterInfo(msg);};
    // 函数注册表
    m_handles[LOGIN] = [this](const std::string &msg) {m_chatroom.handleLoginInfo(msg);};
    // 注册表：通常指系统或程序用于存储配置信息的一个数据库或键值对存储结构
    // 注册机：通常指一种用于管理函数或对象方法的机制。在编程中，它能够自动化地处理函数的注册和调用
}

// 析构函数
MessageHandler::~MessageHandler()
{
    
}

// 处理信息
void MessageHandler::handleMessage(const std::string &msg)
{
    int type = 0;
    // 1、将json字符串解析成json对象
    json_object *jsonObj = json_tokener_parse(msg.c_str());

    type = json_object_get_int(json_object_object_get(jsonObj, "type"));

    auto iter = m_handles.find(type);
    if (iter != m_handles.end())
    {
        // 执行回调
        iter->second(msg);
    }
    else
    {
        // 处理未知的消息类型
        std::cout << "unknown message type:" << type << std::endl;
    }
}